package cn.demoncat.util.pay.ceb.entity;

import cn.demoncat.util.lang.LocalDateUtil;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * 光大银行-响应参数-查询资金明细
 *
 * @author 延晓磊
 * @since 2022年02月18日
 */
@Data
public class QueryAccountLogResponseParam extends ResponseParam{

    /**
     * 响应体
     */
    private ResponseBody body;

    /**
     * 响应体
     */
    @Data
    public static class ResponseBody extends ResponseParam.ResponseBody{
        // 总条数
        private Long totalNum;
        // 列表
        @XStreamImplicit
        private List<Data> frame;

        /**
         * 数据
         */
        @lombok.Data
        public static class Data{

            // 资金监管系统流水号
            private String fcsSerialNum;
            // 账户名称
            private String memName;
            // 虚拟账户：商户账户=商户号+虚拟账户类型，会员=会员编号
            private String memNum;
            // 0-借（支出）  1-贷（收入）
            private String addReduce;
            // 发生金额
            private BigDecimal tradeAmount;
            // 账务处理时间：yyyyMMddHH:mm:ss
            private String procTime;
            // 资金余额
            private BigDecimal balance;
            // 可用余额
            private BigDecimal useableBalance;
            // 对方名称
            private String otherName;
            // 对方虚拟账户
            private String otherNum;
            // 是否跨行：01行内，02跨行
            private String isCrossLine;
            // 业务类型：0-入金、1-出金、2-交易、3-暂挂
            private String busType;
            // 摘要
            private String brief;
            // 入金渠道：0-非资金监管渠道入金、1-资金监管渠道入金；当资金明细标识为2-入金、虚拟账户类型为0或99时此字段有效
            private String filed1;
            // 对方实体账号：查询标志为资金暂挂【4】，虚拟账户类型为资金暂挂户【5】时有值
            private String filed2;

            /**
             * 账务处理时间
             *
             * @return yyyy-MM-dd HH:mm:ss
             */
            public String getProcTime(){
                if (StringUtils.isNotBlank(this.procTime)) {
                    return LocalDateUtil.toStr(LocalDateUtil.toLocalDateTime(this.procTime, DateTimeFormatter.ofPattern("yyyyMMddHH:mm:ss")));
                }
                return this.procTime;
            }

            /**
             * 业务类型
             */
            public interface BizType{

                // 入金 - 充值
                String INCOME = "0";
                // 出金 - 提现、转出
                String EXPEND = "1";
                // 交易 - 冻结、解冻、退款、收取
                String TRADE = "2";
                // 暂挂 - 入账到暂挂户（入金未匹配）
                String PENDING = "3";
            }
        }
    }


}
